package com.swa99ylum.pxp.a.a010;

import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class Test1 {
	
	List<String> stringList = new ArrayList<String>();
    List<Integer> integerList = new ArrayList<Integer>();

//    public static void main(String[] args) throws Exception {
//        Field stringListField = Test1.class.getDeclaredField("stringList");
//        ParameterizedType stringListType = (ParameterizedType) stringListField.getGenericType();
//        Class<?> stringListClass = (Class<?>) stringListType.getActualTypeArguments()[0];
//        System.out.println(stringListClass); // class java.lang.String.
//        
//        
//        Foo foo = new Foo();
//        Class clazz = foo.getClass();
//        List<clazz> asd = new ArrayList<>();
//
//        Field integerListField = Test1.class.getDeclaredField("integerList");
//        ParameterizedType integerListType = (ParameterizedType) integerListField.getGenericType();
//        Class<?> integerListClass = (Class<?>) integerListType.getActualTypeArguments()[0];
//        System.out.println(integerListClass); // class java.lang.Integer.
//    }
	
//	/*** 
//     * 获取List中的泛型 
//     */  
//    public static void testList() throws NoSuchFieldException, SecurityException {  
//    	List<Integer> list = new ArrayList<>();
//        Type t = Foo.class.getDeclaredField("list").getGenericType(); 
//        Type t2 = list.getClass().getClass().getGenericInterfaces();
//        if (ParameterizedType.class.isAssignableFrom(t.getClass())) {  
//            for (Type t1 : ((ParameterizedType) t).getActualTypeArguments()) {  
//                System.out.print(t1 + ",");  
//            }  
//            System.out.println();  
//        }  
//    }  
    
//	public void aaa() {
//		List<Foo> list = new ArrayList<Foo>();
//		
//		Field[] fields = list.getClass().getDeclaredFields();  
//        
//		for(Field f : fields){  
//		    f.setAccessible(true); 
//		    System.out.println(f.getType());
//		    if(f.getType() == java.util.List.class){  
//		        // 如果是List类型，得到其Generic的类型    
//		        Type genericType = f.getGenericType();   
//		        if(genericType == null) continue;    
//		        // 如果是泛型参数的类型     
//		        if(genericType instanceof ParameterizedType){     
//		            ParameterizedType pt = (ParameterizedType) genericType;  
//		            //得到泛型里的class类型对象    
//		            Class<?> genericClazz = (Class<?>)pt.getActualTypeArguments()[0];   
//		            System.out.println(genericClazz);
//		        }     
//		    }  
//		    
//		}
//	}
	
	public static void main1(String[] args) throws NoSuchFieldException, SecurityException {
//		testList();
//		Test1 t = new Test1();
//		t.aaa();
////		ParameterizedType parameterizedType = (ParameterizedType) this.getClass().getGenericSuperclass();//获取当前new对象的泛型的父类类型
//		ParameterizedType parameterizedType = (ParameterizedType) Test1.class.getGenericSuperclass();//获取当前new对象的泛型的父类类型
//
//		int index = 0;//第n个泛型    Map<K,V> 就有2个  拿K  就是0  V就是1
//
//
////		    Foo clazz = (Class) parameterizedType.getActualTypeArguments()[index];
////		    System.out.println("clazz ==>> "+clazz);
	}
}
